package com.shujia.spark

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Demo4Map {

  def main(args: Array[String]): Unit = {

    /**
      * 转换算子和操作算子
      *
      * 如果算子返回值不是一个rdd那么这个算子就是操作算子,如果返回值是一个rdd这个算子就是转换算子
      *
      *
      * 转换算子: RDD之间的转换,是懒执行, 需要一个操作算子触发执行
      * 操作算子: 触发任务执行,每一个操作算子都会触发一个任务执行
      *
      *
      */


    val conf: SparkConf = new SparkConf()
      .setAppName("make")
      .setMaster("local")


    val sc = new SparkContext(conf)


    /**
      *
      * map算子  对rdd的数据进行处理,  处理之后rdd总的行数不变,类型可以变
      *
      */


    val rdd1: RDD[Int] = sc.parallelize(List(1, 2, 3, 4, 5, 6, 7, 8, 9))


    //对rdd中的奇数加一  偶数乘2

    println("map之前===================")

    val rdd2: RDD[AnyVal] = rdd1.map(i => {

      println("map方法被执行")

      if (i % 2 == 1) {
        //代码块最后一行作为方法的返回值
        i + 1
      } else if (i % 2 == 0) {
        i * 2
      }
    })

    println("map之后===================")


    //每一个操作算子都会触发一个job
    rdd2.foreach(println)
    rdd2.foreach(println)
    rdd2.foreach(println)


  }

}
